#ifndef __COMMAND_MANAGER_IF_HPP__
#define __COMMAND_MANAGER_IF_HPP__ 

#include "khan.hpp"
#include "vty.hpp"

typedef boost::function<int(__u64, vty_ptr, const std::string&, string_vector&)> AgentFunction;

class command_manager_if
{
public:
    virtual ~command_manager_if() {};

    virtual bool add_mode(const std::string name, 
            const std::string prompt, bool is_auth = false) = 0;
    virtual bool add_command( const std::string mode, 
            const std::string cmd, const std::string help, ExcuteHandle run) = 0;
};

class command_agent_if  /* FIXME */
:public command_manager_if
{
public:
    virtual ~command_agent_if() {};

    virtual bool add_command( const std::string mode, 
            const std::string cmd, const std::string help, ExcuteHandle run) = 0;
    virtual bool add_command( const std::string mode, const std::string cmd, 
            const std::string help, const tcp_endpoint& rep, 
            __u64 agent_id, __u64 function_id) = 0;
};

typedef boost::shared_ptr<command_manager_if> command_manager_if_ptr;
typedef boost::shared_ptr<command_agent_if> command_agent_if_ptr;

#endif  /* __COMMAND_MANAGER_IF_HPP__ */
